// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/15/2015 9:13:58 PM				
// -----------------------------

#ifndef _Engine_h
#define _Engine_h

#include "Common.h"

namespace Flow
{

	class Timer;
	class GraphicsManager;
	class StateManager;
	class JobManager;
	class FileManager;
	class TextureManager;

	class IGame;
	class IPlatform;
	class IWindow;
	class IGraphicsDevice;

	class Engine
	{
	public:

		static GameConfig		Config;
		static Color			ClearColor;

		static Timer*			GameTimer;
		static StateManager*	States;
		static JobManager*		Jobs;
		static FileManager*		Files;

		static IGame*			Game;
		static IPlatform*		Platform;
		static IWindow*			Window;

		static Bool				Initialize(IGame* lpGame);
		static void				Uninitialize();

		static Int32			Run();
		static void				Exit();

	private:

		static Bool				InitializePlatformResources();
		static Bool				InitializeNonPlatformResources();

		static Bool				ShouldRun;

		static GraphicsManager*	Graphics;

		Engine();
		~Engine();
		Engine(const Engine& refEngine);
		Engine& operator=(const Engine& refEngine);
	};

}

#endif